home *** CD-ROM | disk | FTP | other *** search
/ World of Education / World of Education.iso / world_s / startrek.zip / REALTIME.BAS < prev    next >
BASIC Source File  |  1985-05-23  |  24KB  |  454 lines

  1. 10 CLS : PRINT " REAL TIME STARTREK VERSION 85-05-23" : ON ERROR GOTO 6000
  2. 15 C3 = 1 : C4 = 15 : C7 = 56 :C6 = 10
  3. 20 PRINT : PRINT "By Joe Kasser" : PRINT : GOSUB 4500 : GOSUB 4660
  4. 30 PRINT : PRINT K9/100;"Klingons have invaded Federation territory" : PRINT
  5. 40 PRINT "Your mission is to destroy them in";T;"Stardates" : GOTO 3000
  6. 50 REM SUBROUTINE TO SET UP 2 RANDOM CO-ORDINATES
  7. 60 X=INT(RND(Z)*8) : Y=INT(RND(Z)*8) : RETURN
  8. 70 REM SUB TO PRINT HEADING
  9. 80 PRINT : PRINT D$(I);"AT QUADRANT";Q1+Z;",";Q2+Z : PRINT : RETURN 
  10. 90 REM SUBROUTINE TO SET UP ENTERPRISE PARAMETERS
  11. 100 E=E0 : E1=0 : P=10 : RETURN
  12. 110 REM SUBROUTINE TO DAMAGE SOMETHING
  13. 120 Y=Z+RND(Z)*W : X=INT((C1-C2)*RND(Z)) : D(X)=Y+D(X) : PRINT D$(X); "DAMAGED" : RETURN
  14. 130 REM ENERGY HIT SUBROUTINE
  15. 140 E1=E1-H : E=E-H : IF E1=<0 THEN F9=2 : GOTO 160
  16. 150 IF H>E1/2 THEN PRINT "SHIELD OVERLOAD ....."; : GOSUB 110
  17. 160 RETURN
  18. 170 REM SUBROUTINE TO PRINT SCORE
  19. 180 N=INT(((K8-K9)/100)*(K5/2.5+K4+Z)^2*100/(T9-T)) : IF N<0 THEN N=0
  20. 190 PRINT "SCORE";TAB(38);N : RETURN
  21. 200 REM MAP (COMPUTER) ROUTINE
  22. 210 I=5 : LOCATE C4,C3 : IF D(I)>0 THEN PRINT "COMPUTER DOWN AT THIS TIME " : GOTO 280
  23. 220 FOR I=0 TO 7 : PRINT TAB(C3+(Z+I)*5);I+Z; : NEXT : PRINT : FOR I=0 TO 7 : LOCATE C4+I+1,C3 : PRINT I+Z ;
  24. 230 FOR J=0 TO 7 : PRINT " "; : IF I=Q1 AND J=Q2 AND Q(I,J)<0 THEN PRINT CHR$(8);"+***+"; : GOTO 270
  25. 240 IF Q(I,J)<0 THEN PRINT "*** "; : GOTO 270
  26. 250 E$=STR$(Q(I,J)) : E$=" 00"+MID$(E$,2) : : IF I=Q1 AND J=Q2 THEN PRINT CHR$(29);"+";RIGHT$(E$,3);"+";  : GOTO 270
  27. 260 PRINT RIGHT$(E$,3);" ";
  28. 270 NEXT J : PRINT : NEXT I
  29. 280 RETURN
  30. 300 REM LRS LONG RANGE SENSOR SCAN ROUTINE
  31. 310 LOCATE C2,C7 : IF D(I)>0 THEN PRINT D$(I); " DAMAGED" : GOTO 370
  32. 320 N=0 : FOR I=Q1-Z TO Q1+Z : LOCATE C2+N,C7 : N=N+Z : FOR J=Q2-Z TO Q2+Z: PRINT " ";
  33. 330 IF I<0 OR I>7 OR J<0 OR J>7 THEN PRINT "***" ; : GOTO 360
  34. 340 IF D(5)=0 THEN Q(I,J)=ABS(Q(I,J))
  35. 350 E$=STR$(Q(I,J)) : E$="00"+MID$(E$,2) : PRINT RIGHT$(E$,3);
  36. 360 NEXT J : PRINT : NEXT I
  37. 370 RETURN
  38. 390 REM
  39. 400 REM SRS SHORT RANGE SENSORS
  40. 410 IF D(I)>0 THEN PRINT D$(I); " DAMAGED" : RETURN
  41. 420 IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN 440
  42. 430 IF D(5)=0 THEN Q(Q1,Q2)=ABS(Q(Q1,Q2))
  43. 440 GOSUB 3400 : LOCATE 3,1 : PRINT "   1 2 3 4 5 6 7 8";TAB(20); : GOSUB 170  : FOR I=0 TO 7 : LOCATE I+4,1 : PRINT I+Z ;
  44. 450 FOR J=0 TO 7 : PRINT MID$(S$,S(I,J),Z); " ";: NEXT J : PRINT TAB(20) ;
  45. 460 ON I+Z GOTO 470,480,490,500,510,520,530,540
  46. 470 PRINT "DAYS LEFT"; TAB(38);T : GOTO 550
  47. 480 PRINT "CONDITION "; TAB(38);C$ : GOTO 550
  48. 490 PRINT "SHIELDS"; TAB(38);E1 : GOTO 550
  49. 500 PRINT "ENERGY" ; TAB(38);E : GOTO 550
  50. 510 PRINT "PHOTON TORPEDOES";TAB(38);P : GOTO 550
  51. 520 PRINT "STARBASES";TAB(38);B9/10 : GOTO 550
  52. 530 PRINT "KLINGONS LEFT";TAB(38);K9/100 : GOTO 550
  53. 540 PRINT "KLINGONS CAPTURED";TAB(38);K4 : GOTO 550
  54. 550 NEXT I : RETURN
  55. 600 REM SHOOTBACK SUBROUTINE
  56. 610 IF C$="DOCKED" THEN 680 
  57. 620 FOR I=0 TO 7 : IF K3(I)<=0 OR RND(Z)<.1*(I+Z) THEN 670
  58. 630 IF RND(Z)>K3(I)/500 THEN PRINT "KLINGON TORPEDO"; : H=RND(Z)*E1 : E1=E1+H : E=E+H : GOTO 660
  59. 640 H=K3(I)*.4*RND(Z) : K3(I)=K3(I)-H : H=H/(SQR((K1(I)-S1)^2+(K2(I)-S2)^2))^.4
  60. 650 PRINT H;"Unit hit on Enterprise";
  61. 660 PRINT " from sector";K1(I)+Z;",";K2(I)+Z : GOSUB 130 : IF F9>0 THEN 680
  62. 670 NEXT : IF E1<100 THEN PRINT D$(6);" Dangerously low";CHR$(7)
  63. 680 RETURN
  64. 700 REM MOVE KLINGON ROUTINE
  65. 710 FOR I=0 TO 7 : IF K3(I)<=0 THEN 740
  66. 720 GOSUB 50 : IF S(X,Y)<>Z THEN 740
  67. 730 S(K1(I),K2(I))=Z : K1(I)=X : K2(I)=Y : S(X,Y)=4
  68. 740 NEXT : RETURN
  69. 800 REM PHA PHASERS
  70. 810 IF K=0 THEN PRINT "No targets in quadrant .......  sir " : GOTO 950
  71. 820 IF D(I)>0 THEN PRINT D$(I);"OUT OF ACTION SIR" : GOTO 950
  72. 830 IF D(1)>0 THEN PRINT D$(1);"are not working, will use best guess settings"
  73. 840 INPUT "READY- how much energy do you want to fire "; X : IF X<=0 THEN 950
  74. 850 IF X>(E-E1) THEN PRINT "We don't have that much energy available sir" : GOTO 840
  75. 860 E = E - X : Y = K : FOR I = 0 TO 7 : IF K3(I)<=0 THEN 940
  76. 870 IF D(1)>0 THEN X = X*RND(Z)
  77. 880 H = X/(Y*(SQR((K1(I)-S1)^2+(K2(I)-S2)^2)^.4)) : K3(I) = K3(I) - H
  78. 890 PRINT "Hit on KLINGON at";K1(I)+Z;",";K2(I)+Z; : IF D(1)=0 THEN PRINT "(";K3(I);"Units left)" ELSE PRINT
  79. 900 IF K3(I)<=0 THEN K3(I) = 0 : PRINT "KLINGON DESTROYED" : S(K1(I),K2(I)) = Z : GOSUB 1220 : GOTO 940
  80. 910 IF K>Z OR K3(I)>E1/100 OR RND(Z)>.4 THEN 940
  81. 920 K3(I)=0 : S(K1(I),K2(I))=Z : GOSUB 1220 : IF RND(Z)<.7 THEN PRINT "KLINGON EXPLODED" : K5=K5+Z : GOTO 940
  82. 930 PRINT "KLINGON SURRENDERS .....Boarding party away" : K4 = K4 + Z : T1 = T : T = T - .5 : GOSUB 1800
  83. 940 NEXT
  84. 950 RETURN
  85. 1000 REM TOR PHOTON TORPEDOES
  86. 1010 IF D(I) > 0 THEN PRINT "TUBES BLOCKED" : GOTO 1210
  87. 1020 IF P = 0 THEN PRINT "NO TORPEDOE's LEFT SIR !" : GOTO 1210
  88. 1030 LOCATE 25,16 : INPUT "DIRECTION (1-9) ";C : IF C<1 OR C>9 THEN 1030
  89. 1040 Y1=S1+.5 : X1=S2+.5 : Y=(C-Z)*.785398 : X=COS(Y) : Y=-SIN(Y)
  90. 1050 P=P-Z : FOR J1=0 TO E0 : Y1=Y1+Y : X1=X1+X : Y2=INT(Y1) : X2=INT(X1)
  91. 1060 IF X2<0 OR X2>7 OR Y2<0 OR Y2>7 THEN PRINT "MISSED" : GOTO 1210
  92. 1070 J2 = S(Y2,X2) : S(Y2,X2)=6 : GOSUB 400 : S(Y2,X2) = J2 : ON S(Y2,X2) GOTO 1200,1080,1190,1100,1150
  93. 1080 PRINT "STAR "; : IF RND(Z)<.5 THEN PRINT "ABSORBED TORPEDO" : GOTO 1210
  94. 1090 PRINT "DEFLECTED TORPEDO" : Y=Z+RND(Z)*8*.785398 : X=COS(Y) : Y=-SIN(Y) : GOTO 1200
  95. 1100 IF RND(Z)>.9 THEN 1200
  96. 1110 PRINT " KLINGON DESTROYED"
  97. 1120 FOR I=0 TO 7 : IF Y2=K1(I) AND X2=K2(I) THEN 1140
  98. 1130 NEXT I : PRINT "SENSOR  MALFUNCTION";CHR$(7)
  99. 1140 K3(I)=0 : GOSUB 1220 :  GOTO 1180 
  100. 1150 PRINT " STARBASE DESTROYED, WELL DONE" : B=B-Z : B9=B9-10 : K8=K9 : T9=T+Z
  101. 1160 IF Q(Q1,Q2)<0 THEN Q(Q1,Q2)=Q(Q1,Q2)+10 ELSE Q(Q1,Q2)=Q(Q1,Q2)-10
  102. 1170 IF B9=0 THEN PRINT : PRINT "THAT WAS YOUR LAST STARBASE"
  103. 1180 S(Y2,X2)=Z : GOTO 1210
  104. 1190 PRINT CHR$(7);"EVASIVE ACTION ....missed us"
  105. 1200 NEXT J1
  106. 1210 RETURN
  107. 1220 REM SUBROUTINE TO CLEAR KLINGON FROM SIMULATION
  108. 1230 K=K-Z : K9=K9-100 : IF K9=0 THEN F9=5
  109. 1240 IF Q(Q1,Q2)<0 THEN Q(Q1,Q2)=Q(Q1,Q2)+100 ELSE Q(Q1,Q2)=Q(Q1,Q2)-100
  110. 1250 RETURN
  111. 1300 REM NAV/WARP ENGINES/NAVIGATION 
  112. 1310 INPUT "DIRECTION PLEASE (1-9) ";C : IF C<1 OR C>9 THEN 1310
  113. 1320 INPUT "WARP FACTOR ";W : IF W=<0 THEN 1750
  114. 1330 IF W>8 THEN PRINT " SIR WE CANNA GO THAT FAST" : GOTO 1320
  115. 1340 IF D(0)=0 THEN 1360
  116. 1350 IF W>=Z THEN PRINT D$(I);"DAMAGED (maximum allowable=.9) " : GOTO 1320
  117. 1360 REM MOVE ON
  118. 1370 S(S1,S2)=Z : T1=T : IF K>0 AND W>=Z THEN GOSUB 600 : IF F9>0 THEN 1750
  119. 1380 Y1=S1+.5 : X1=S2+.5 : Y=(C-Z)*.785398 : X=COS(Y) : Y=-SIN(Y) 
  120. 1390 FOR I=0 TO INT(W*8) : T=T-.1 : Y1=Y1+Y : X1=X1+X : Y2=INT(Y1) : X2=INT(X1)
  121. 1400 IF X2<0 OR X2>7 OR Y2<0 OR Y2>7 THEN 1490
  122. 1410 ON S(Y2,X2) GOTO 1470,1420,1470,1440,1450
  123. 1420 PRINT "STAR DEAD AHEAD" : IF RND(Z)>.6 AND B=0 THEN 1640
  124. 1430 PRINT "EMERGENCY ENGINE SHUT DOWN" : D(0)=D(0)+.5 : GOSUB 1780 : GOTO 1720
  125. 1440 PRINT : PRINT "STAND BY FOR COLLISION WITH KLINGON" : GOSUB 1780 : GOSUB 110 : GOTO 1720
  126. 1450 GOSUB 1780 : PRINT : PRINT "MESSAGE FROM STARBASE" : IF K>0 THEN PRINT "CLUMSY" : GOTO 1720
  127. 1460 PRINT "ENTERPRISE CAUGHT IN TRACTOR BEAM BEFORE COLLISION" : GOTO 1720
  128. 1470 NEXT : S1=Y2 : S2=X2 : S(Y2,X2)=3 : GOTO 1580
  129. 1490 REM-OUT OF SECTOR
  130. 1500 Q1=INT(Q1+W*Y+(S1+.5)/8) : Q2=INT(Q2+W*X+(S2+.5)/8) : T=T-.6
  131. 1510 IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN 1550
  132. 1520 REM INSIDE GALAXY
  133. 1530 IF G9=Z THEN GOSUB 1760 : G9=0 
  134. 1540 GOTO 1570
  135. 1550 IF G9=0 THEN GOSUB 1760 : G9=Z
  136. 1570 GOSUB 3200
  137. 1580 I=INT(RND(Z)*100) : IF I=0 OR I>4 THEN 1720
  138. 1590 IF G9=Z THEN 1680
  139. 1600 PRINT : IF B>0 THEN 1720
  140. 1610 ON I GOTO 1620,1640,1670,1680
  141. 1620 PRINT CHR$(7);"KLINGON SPACE MINE " : H=RND(Z)*400 : GOSUB 130 : IF F9>0 THEN 1750
  142. 1630 PRINT "SHIELDS DOWN TO"; E1; " UNITS" : GOTO 1720
  143. 1640 PRINT "SPACE WARP DUE TO GRAVITATIONAL ANOMALY" : GOSUB 50 : Q1=INT(X-P) : Q2=INT(Y-P)
  144. 1650 G9=0 : IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN G9=Z
  145. 1660 PRINT "SENSORS SHOW WE SEEM TO HAVE MOVED TO QUADRANT"; Q1+Z;",";Q2+Z : GOSUB 3200 : GOTO 1740
  146. 1670 PRINT CHR$(7);"ION STORM " : GOSUB 110 : GOTO 1720
  147. 1680 REM SPOCK DOES HIS FIXING HERE
  148. 1690 GOSUB 50 : FOR I=X TO C1-C2 : IF D(I)>0 THEN 1710
  149. 1700 NEXT : FOR I=0 TO X : IF D(I)<=0 THEN NEXT : GOTO 1720
  150. 1710 D(I)=0 : PRINT " Mr. SPOCK FIXED the ";D$(I)
  151. 1720 E=E-((INT(W*8))^2)/2 : IF E<0 THEN F9=3 : GOTO 1750
  152. 1730 GOSUB 1800 : IF E1>E THEN E1=E
  153. 1740 GOSUB 3400
  154. 1750 RETURN
  155. 1760 PRINT "CROSSING BARRIER at GALACTIC BOUNDARY" : GOSUB 110 : RETURN
  156. 1780 REM SUBROUTINE TO BACK UP ONE SECTOR
  157. 1790 S1=INT(Y1-Y) : S2=INT(X1-X) : S(S1,S2)=3 : RETURN
  158. 1800 REM SUBROUTINE FOR REPAIRS AFTER TIME (T1-T)
  159. 1810 IF T<0 THEN F9=4 : GOTO 1870
  160. 1820 N=0 :FOR I=0 TO C1-C2 : IF D(I)=<0 THEN 1860
  161. 1830 D(I)=D(I)-(T1-T) : IF D(I)>0 THEN 1860
  162. 1840 IF N=0 THEN PRINT : PRINT "DAMAGE CONTROL REPORTING " : N=Z
  163. 1850 D(I)=0 : PRINT D$(I);"REPAIRED" 
  164. 1860 NEXT
  165. 1870 RETURN
  166. 1900 REM COMPUTER
  167. 1910 IF D(I)>0 THEN PRINT "COMPUTER DOWN AT THIS TIME " : GOTO 1970
  168. 1920 INPUT "Computer WORKING ";A$
  169. 1930 IF LEN(A$)<3 THEN PRINT "THAT DOES NOT COMPUTE (3 letters please) " : PRINT : GOTO 1920
  170. 1940 FOR I=0 TO LEN(C2$)/3-Z : IF A$=MID$(C2$,I*3+Z,3) THEN 1960
  171. 1950 NEXT : FOR I=0 TO LEN(C2$)/3-Z : PRINT MID$(C2$,I*3+Z,3); TAB(8); C3$(I) : NEXT : PRINT : GOTO 1920
  172. 1960 ON I+Z GOSUB 200,170,1980,2060,2360
  173. 1970 RETURN
  174. 1980 REM COMPUTER KLINGON STATUS
  175. 1990 IF D(5)>0 OR D(1)>0 THEN PRINT "COMPUTER/SENSOR MALFUNCTIONING AT THIS TIME " : GOTO 2050
  176. 2000 IF K=0 THEN PRINT "No KLINGONs in Quadrant" : GOTO 2050
  177. 2010 J=0 : X1=S1 : Y1=S2 :: FOR I=0 TO 7 : IF K3(I)=<0 THEN 2040
  178. 2020 IF J=0 THEN PRINT "KLINGON","  ENERGY";TAB(30);"DISTANCE";TAB(40);"DIRECTION" : J=Z
  179. 2030 PRINT K1(I)+Z;",";K2(I)+Z,K3(I); : X=K1(I) : Y=K2(I) : GOSUB 2210 : PRINT TAB(30);X2;TAB(40);Y2
  180. 2040 NEXT
  181. 2050 C9=Z : GOTO 1970
  182. 2060 REM DIRECTION/DISTANCE CALCULATOR 
  183. 2070 INPUT "Quadrant, Sector or Other (Q/S/O) ";A$
  184. 2080 IF LEFT$(A$,Z)="Q" THEN 2120
  185. 2090 IF LEFT$(A$,Z)="S" THEN 2140
  186. 2100 IF LEFT$(A$,Z)="O" THEN 2160
  187. 2110 GOTO 2070
  188. 2120 X1=Q1 : Y1=Q2 : PRINT "YOU ARE IN QUADRANT";Q1+Z;",";Q2+Z
  189. 2130 INPUT "DESTINATION CO-ORDINATES (Row,Column) ";X,Y : X=X-Z : Y=Y-Z : GOTO 2190
  190. 2140 X1=S1 : Y1=S2 : PRINT "YOU ARE IN SECTOR"; S1+Z;",";S2+Z
  191. 2150 INPUT "DESTINATION/TARGET CO-ORDINATES (Row,Column) ";X,Y : X=X-Z : Y=Y-Z : GOTO 2190
  192. 2160 PRINT "YOU ARE IN QUADRANT";Q1+Z;",";Q2+Z,"SECTOR ";S1+Z;","S2+Z
  193. 2170 PRINT : INPUT "INITIAL CO-ORDINATES (Row,Column) ";X1,Y1
  194. 2180 INPUT "DESTINATION CO-ORDINATES (Row,Column) ";X,Y
  195. 2190 PRINT : GOSUB 2210 : PRINT "DISTANCE=";X2, "BEARING=",Y2
  196. 2200 RETURN
  197. 2210 REM DIRECTION/DISTANCE SUBROUTINE
  198. 2220 IF X=X1 AND Y=Y1 THEN X2=0 : Y2=10 : GOTO 2350
  199. 2230 X2=SQR((X1-X)^2+(Y1-Y)^2)
  200. 2240 X=X-X1 : Y=Y-Y1 : IF X=<0 THEN 2260
  201. 2250 IF Y<0 THEN 2280 ELSE 2320
  202. 2260 IF Y=<0 THEN 2310
  203. 2270 Y2=Z : IF X=0 THEN 2350 ELSE 2290
  204. 2280 Y2=5 : IF X=0 THEN 2350
  205. 2290 IF ABS(X)>ABS(Y) THEN Y2=Y2+Z+(Z-(ABS(Y)/ABS(X))) : GOTO 2350
  206. 2300 Y2=Y2+(ABS(X)/ABS(Y)) : GOTO 2350
  207. 2310 Y2=3 : IF Y=0 THEN 2350 ELSE 2330
  208. 2320 Y2=7 : IF Y=0 THEN 2350
  209. 2330 IF ABS(X)<ABS(Y) THEN Y2=Y2+Z+(Z-(ABS(X)/ABS(Y))) : GOTO 2350
  210. 2340 Y2=Y2+(ABS(Y)/ABS(X))
  211. 2350 RETURN
  212. 2360 IF D(1)>0 THEN PRINT D$(1);"are not working" : GOTO 2470
  213. 2370 IF S9=Z THEN 2410 : REM SECTOR/SYSTEM SCAN
  214. 2380 FOR I=0 TO 7 : FOR J=0 TO 7 : S8(I,J)=0 : IF S(I,J)<>2 OR RND(Z)>.05 THEN 2400
  215. 2390 IF RND(Z)<.5 THEN S8(I,J)=99 ELSE S8(I,J)=INT(RND(Z)*8)
  216. 2400 NEXT J : NEXT I : S9=Z
  217. 2410 PRINT : PRINT "SECTOR","SENSOR READING" : PRINT : FOR I=0 TO 7 : FOR J=0 TO 7
  218. 2420 IF S(I,J)<>2 THEN 2460 
  219. 2430 PRINT I+Z;",";J+Z, : IF S8(I,J)=0 THEN PRINT "No significant data" : GOTO 2460
  220. 2440 IF S8(I,J)=99 THEN PRINT "Dilithium Crystal deposits" : GOTO 2460
  221. 2450 PRINT "Class M Planet,  Culture level"; S8(I,J)
  222. 2460 NEXT J : NEXT I : PRINT
  223. 2470 RETURN
  224. 2500 REM VIS VISUAL
  225. 2510 LOCATE C6,C7 : N=0 : FOR I=S1-2 TO S1+2 : LOCATE C6+N,C7 : N=N+Z : FOR J=S2-2 TO S2+2
  226. 2520 IF I<0 OR I>7 OR J<0 OR J>7 THEN PRINT "$"; : GOTO 2540
  227. 2530 PRINT MID$(S$,S(I,J),Z);
  228. 2540 PRINT " "; : NEXT : PRINT : NEXT : C9=Z : RETURN
  229. 2600 REM RES RESIGN
  230. 2610 IF K>0 THEN PRINT : PRINT "YOUR SURRENDER WILL NOT BE ACCEPTED " :  GOTO 2650
  231. 2620 INPUT "ARE YOU SURE (Yes/No) ";A$ : IF LEN(A$)=0 THEN 2620
  232. 2630 IF LEFT$(A$,Z)="N" THEN 2650
  233. 2640 IF LEFT$(A$,Z)="Y" THEN F9=Z
  234. 2650 RETURN
  235. 2700 REM SHE SHIELDS
  236. 2710 IF C$="DOCKED" THEN PRINT "Regulations forbid raising the shields when docked" : GOTO 2770
  237. 2720 IF D(I)>0 THEN PRINT D$(I)+"DAMAGED" : GOTO 2770
  238. 2730 PRINT D$(I);"currently at";E1;"Units"
  239. 2740 INPUT "How much energy to divert to the shields Sir ";N
  240. 2750 IF N>E THEN PRINT "WE DON'T HAVE THAT MUCH SIR" : GOTO 2740
  241. 2760 E1=N
  242. 2770 RETURN
  243. 2800 REM DAM DAMAGE CONTROL
  244. 2810 GOSUB 70 : D8=0
  245. 2820 FOR I=0 TO C1-C2 : IF D(I)>0 THEN D8=D8+Z 
  246. 2830 NEXT: PRINT : IF D8=0 THEN PRINT : PRINT "ALL SYSTEMS A-OK !": GOTO 2910 
  247. 2840 PRINT "SYSTEM";TAB(28);"ETR" : PRINT
  248. 2850 FOR I=0 TO C1-C2 : IF D(I)>0 THEN PRINT D$(I);TAB(28);INT(D(I)+Z)
  249. 2860 NEXT : IF K>0 THEN 2910
  250. 2870 PRINT :INPUT "HOW MANY DAYS TO SPEND ON REPAIRS SIR ";D8 : IF D8<0 THEN D8=0
  251. 2880 FOR I=0 TO C1-C2 : IF D(I)=0 THEN 2900
  252. 2890 D(I)=D(I)-D8 : IF D(I)=<0 THEN D(I)=0 : PRINT D$(I); "REPAIRED"
  253. 2900 NEXT : T=T-D8
  254. 2910 RETURN
  255. 3000 REM-MAIN LOOP
  256. 3010 CLS
  257. 3020 IF C9=0 THEN I=Z : IF D(Z)=0 THEN GOSUB 400 ELSE I=11 : GOSUB 2500
  258. 3025 IF D(Z)=0 THEN GOSUB 400 ELSE I=11 : GOSUB 2500
  259. 3030 GOSUB 300 : GOSUB 200 : GOSUB 2500
  260. 3040 LOCATE 24,1
  261. 3050 INPUT "COMMAND ";A$ : IF LEN(A$)<3 THEN PRINT "BEG PARDON CAPTAIN (3 letters please) " : GOTO 3050
  262. 3060 FOR I=0 TO LEN(C1$)/3-Z : IF A$=MID$(C1$,(I*3)+Z,3) THEN 3080
  263. 3070 NEXT : FOR I=0 TO C1 : PRINT MID$(C1$,(I*3)+Z,3); TAB(8);D$(I) : NEXT : C9=99 : GOTO 3000
  264. 3080 C9=I : ON I+Z GOSUB 1300,400,300,800,1000,1900,2700,4300,3600,3800,2800,2500,2600,5000,5500,200,1980,2360
  265. 3090 IF F9>0 THEN 9000 ELSE PRINT : IF C9=Z THEN 3110
  266. 3100 IF K>0 THEN GOSUB 700 : GOSUB 600
  267. 3110 IF F9>0 THEN 9000
  268. 3140 GOTO 3000
  269. 3200 REM SUBROUTINE TO SET UP QUADRANT
  270. 3210 FOR I=0 TO 7 : FOR J=0 TO 7 : S(I,J)=Z : NEXT J : NEXT I : S9=0
  271. 3220 IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN K=0 : B=0 : S=INT(RND(Z)*1.2) : GOTO 3250
  272. 3230 N=ABS(Q(Q1,Q2)) : K=INT(N/100) : N=N-K*100 : B=INT(N/10)
  273. 3240 S=ABS(Q(Q1,Q2))-(K*100+B*10) 
  274. 3250 GOSUB 50 : S1=X : S2=Y : S(X,Y)=3 : IF B=0 THEN 3270
  275. 3260 GOSUB 50 : IF S(X,Y)<>Z THEN 3260 ELSE S(X,Y)=5
  276. 3270 FOR I=1 TO S : GOSUB 50 : IF S(X,Y)<>Z THEN 3290 ELSE S(X,Y)=2
  277. 3290 NEXT : FOR I=0 TO 7 : K3(I)=0 : NEXT : IF K=0 THEN 3340 
  278. 3300 FOR I=1 TO K
  279. 3310 GOSUB 50 : IF S(X,Y)<>Z THEN 3310 ELSE S(X,Y)=4
  280. 3320 K1(I)=X : K2(I)=Y : K3(I)=RND(Z)*1000 : NEXT : PRINT : FOR I=Z TO 3 : PRINT "RED ALERT      "; : NEXT
  281. 3330 PRINT CHR$(7) : IF E1=0 THEN PRINT "YOU FORGOT TO RAISE YOUR SHIELDS"
  282. 3340 RETURN
  283. 3400 REM SUBROUTINE TO SET UP CONDITION
  284. 3410 FOR I=S1-Z TO S1+Z : FOR J=S2-Z TO S2+Z
  285. 3420 IF I<0 OR I>7 OR J<0 OR J>7 THEN 3440
  286. 3430 IF S(I,J)=5 THEN 3450
  287. 3440 NEXT J : NEXT I : GOTO 3490
  288. 3450 IF C$="DOCKED" THEN GOSUB 90 : GOSUB 3550 : GOTO 3540
  289. 3460 IF K>0 AND RND(Z)<.5 THEN 3490
  290. 3470 PRINT : PRINT D$(6);"LOWERED FOR DOCKING" : GOSUB 3550 : PRINT : PRINT "REPAIRS and REFUELLING completed"
  291. 3480 GOSUB 90 : T=T-.5 : C$="DOCKED": GOTO 3540
  292. 3490 IF K>0 THEN C$="RED" : GOTO 3540
  293. 3500 FOR I=0 TO C1-C2 : IF D(I)>0 THEN C$="YELLOW" : GOTO 3540
  294. 3510 NEXT : IF E=<E0/10 THEN C$="YELLOW" ELSE C$="GREEN"
  295. 3540 RETURN
  296. 3550 REM SUBROUTINE TO REPAIR ALL SUB-SYSTEMS
  297. 3560 FOR I=0 TO C1-C2 : D(I)=0 : NEXT : RETURN
  298. 3600 REM TRANSPORTER
  299. 3610 IF D(I)>0 THEN PRINT D$(I);"INOPERATIVE AT THIS TIME" : GOTO 3730
  300. 3620 IF D(1)>0 THEN PRINT D$(1);"INOPERATIVE, CANNOT LOCK IN ANY CO-ORDINATES" : GOTO 3730
  301. 3630 IF S9=0 THEN PRINT "Quadrant is not scanned" : GOTO 3730
  302. 3640 IF E1>0 THEN PRINT "SHIELDS are up. Transporter will not beam through" : GOTO 3730
  303. 3650 IF K>0 THEN PRINT "KLINGONS will block the Transporter" : GOTO 3730
  304. 3660 INPUT "Destination co-ordinates ";X,Y : IF X<1 OR X>8 OR Y<1 OR Y>8 THEN 3660
  305. 3670 X=X-Z : Y=Y-Z : IF S8(X,Y)=0 THEN PRINT "THERE IS NOTHING AT THOSE CO-ORDINATES" : GOTO 3730
  306. 3680 H=SQR((S1-X)^2+(S2-Y)^2)*10 : IF (E-H)<0 THEN PRINT "We don't have the energy to beam them that far" : GOTO 3730
  307. 3690 E=E-H : IF E<E1 THEN E1=E
  308. 3700 IF S8(X,Y)=99 THEN GOSUB 4000 ELSE GOSUB 4100
  309. 3710 E=E-H : IF E<E1 THEN E1=E
  310. 3720 PRINT : PRINT "Landing Party beamed aboard"
  311. 3730 RETURN
  312. 3800 REM SHUTTLECRAFT
  313. 3810 IF D(I)>0 THEN PRINT D$(I);"INOPERATIVE AT THIS TIME" : GOTO 3920
  314. 3820 IF D(1)>0 THEN PRINT D$(1); "INOPERATIVE, CANNOT LOCATE ANY CO-ORDINATES" : GOTO 3920
  315. 3830 IF S9=0 THEN PRINT "Quadrant is not scanned" : GOTO 3920
  316. 3840 IF E1>0 THEN PRINT "SHIELDS are up. Shuttlecraft will not pass through" : GOTO 3920
  317. 3850 IF K>0 THEN PRINT "KLINGONS will destroy the Shuttlecraft" : GOTO 3920
  318. 3860 INPUT "Destination co-ordinates ";X,Y : IF X<1 OR X>8 OR Y<1 OR Y>8 THEN 3860
  319. 3870 X=X-Z : Y=Y-Z : IF S8(X,Y)=0 THEN PRINT "THERE IS NOTHING AT THOSE CO-ORDINATES" : GOTO 3920
  320. 3880 X1=(SQR((S1-X)^2+(S2-Y)^2))/10 : IF (T-X1*2)<0 THEN PRINT "We don't have that much time left": GOTO 3920
  321. 3890 T1=T : T=T-X1 : GOSUB 1800 : PRINT "Shuttlecraft Gallileo launched" : PRINT
  322. 3900 IF S8(X,Y)=99 THEN GOSUB 4000 ELSE GOSUB 4100
  323. 3910 T1=T : T=T-X1 : GOSUB 1800 : PRINT "Shuttlecraft Gallileo returned"
  324. 3920 RETURN
  325. 4000 REM MINING OPERATION
  326. 4010 PRINT : J=RND(Z)*E0 : PRINT "LANDING PARTY reports that cystals can be mined"
  327. 4020 PRINT "to supply us with";J;"Units per day down here"
  328. 4030 PRINT : INPUT "How many days do they stay down ";N : IF N<0 THEN N=0 
  329. 4040 IF (T-N)<0 THEN PRINT "YOU DON'T HAVE THAT MUCH TIME" : GOTO 4060
  330. 4050 T1=T : T=T-N : E=E+N*J : GOSUB 1800
  331. 4060 RETURN
  332. 4100 REM SPARES/ETC
  333. 4110 J=RND(Z)*S8(X,Y) : PRINT "LANDING PARTY reports that they can locate"
  334. 4120 PRINT "materials to expedite repairs in";J;"Stardates"
  335. 4130 INPUT "How long should they stay there ";X : IF X>J THEN X=J
  336. 4140 IF (T-X)<0 THEN PRINT "YOU DON'T HAVE THAT MUCH TIME" : GOTO 4210
  337. 4150 IF J=X THEN J=E0
  338. 4160 J=X/J : T=T-X : N=0 : FOR I=0 TO C1-C2 : IF D(I)=<0 THEN 4200
  339. 4170 D(I)=D(I)*J : D(I)=D(I)-(T1-T) : IF D(I)>0 THEN 4200
  340. 4180 IF N=0 THEN PRINT : PRINT "DAMAGE CONTROL REPORTING " : N=Z
  341. 4190 D(I)=0 : PRINT D$(I);"REPAIRED"
  342. 4200 NEXT
  343. 4210 RETURN
  344. 4300 REM LONG RANGE PROBE
  345. 4310 IF D(I)>0 THEN PRINT "LAUNCH CONTROL INOPERATIVE AT THIS TIME" : GOTO 4470
  346. 4320 L3=L3+Z : IF L3>7 THEN PRINT " No Probes left...  Sir " : GOTO 4470
  347. 4330 IF K>0 THEN PRINT "You are not allowed to launch a probe during a battle" : GOTO 4470
  348. 4340 PRINT "LRP";L3;"Direction (1-9) "; : INPUT C : IF C=0 THEN 4470
  349. 4350 IF C<Z OR C>9 THEN 4340
  350. 4360 X1=Q1 : Y1=Q2 : X2=Q1+.5 :  Y2=Q2+.5 : T1=T : FOR I=0 TO E0 : T=T-.1
  351. 4370 Y=(C-Z)*.785398 : X=COS(Y) : Y=-SIN(Y)
  352. 4380 X2=X2+Y : Y2=Y2+X : X1=INT(X2) : Y1=INT(Y2)
  353. 4390 IF SQR((X1-Q1)^2+(Y1-Q2)^2)>5 THEN PRINT "Probe out of range" : GOTO  4460
  354. 4400 PRINT X1+Z;",";Y1+Z;" =";
  355. 4410 IF X1<0 OR X1>7 OR Y1<0 OR Y1>7 THEN PRINT "***" : GOTO 4450
  356. 4420 E$=STR$(Q(X1,Y1)) : E$="00"+MID$(E$,2) : PRINT RIGHT$(E$,3) 
  357. 4430 IF D(5)=0 THEN Q(X1,Y1)=ABS(Q(X1,Y1))
  358. 4440 IF RND(Z)<ABS(Q(X1,Y1)+Z)/1000 THEN PRINT "Contact lost with probe" : GOTO 4460
  359. 4450 NEXT
  360. 4460 GOSUB 1800
  361. 4470 RETURN
  362. 4500 REM INITIALISATION SEQUENCE
  363. 4510 Z=1 : S$=".*EKB+" : E0=4000 : C1=14 : C2=5
  364. 4520 DIM D(C1),D$(C1),Q(7,7),S(7,7),K1(7),K2(7),K3(7),S8(7,7)
  365. 4530 PRINT "Welcome to  the Starfleet  Academy Command Training"
  366. 4540 PRINT "Simulator. You are assigned the role of the captain"
  367. 4550 PRINT "of the Starship Enterprise."
  368. 4560 PRINT : PRINT "For assistance, type HELP or read the manual"
  369. 4570 D$(0)="WARP ENGINES " : D$(1)="SHORT RANGE SENSORS " : D$(2)="LONG RANGE SENSORS " : D$(3)="PHASERS "
  370. 4580 D$(4)="PHOTON TORPEDOES " : D$(5)="COMPUTER " : D$(6)="SHIELDS " : D$(7)="LONG RANGE PROBES "
  371. 4590 D$(8)="TRANSPORTER " :D$(9)="SHUTTLECRAFT " :D$(10)="DAMAGE CONTROL " :D$(11)="VISUAL " :D$(12)="RESIGN"
  372. 4600 D$(13)="SAVE THE STATE OF THE GAME" : D$(14)="LOAD A SAVED GAME"
  373. 4610 C1$="NAVSRSLRSPHATORCOMSHELRPTRASHUDAMVISRESSAVLSGMAPKSTSCA" : C2$="MAPSTAKSTDIRSCA"
  374. 4620 C3$(0)="MAP" : C3$(1)="STAtus (Score)" : C3$(2)="KLINGON STatus"
  375. 4630 C3$(3)="DIRECTION/DISTANCE calculator" : C3$(4)="Sector/System SCAn"
  376. 4650 RETURN
  377. 4660 C9=0 : K4=0 : K5=0 : F9=0 : G9=0 : K9=0 : B9=0 : L3=0 : GOSUB 3550 
  378. 4670 FOR I=0 TO 7 : FOR J=0 TO 7 : GOSUB 4790 : Q(I,J)=-(K+B+S) : NEXT J : NEXT I
  379. 4710 IF K9>2000 THEN 4740
  380. 4720 GOSUB 50 : IF Q(X,Y)<-9 THEN 4720
  381. 4730 GOSUB 4790 : Q(X,Y)=-(K+B+S) : GOTO 4710
  382. 4740 IF K9/100<30 THEN T=30 ELSE T=K9/100
  383. 4750 T9=T+Z : IF B9=0 THEN GOSUB 50 : Q(X,Y)=Q(X,Y)-10 : B9=10 
  384. 4760 GOSUB 50 : Q1=X : Q2=Y : GOSUB 3200 : GOSUB 90 : E1=E0/10 : GOSUB 3400 : RETURN
  385. 4790 S=INT(RND(Z)*7+Z)
  386. 4800 B=0 : IF RND(Z)<.02 THEN B=10 : B9=B9+B
  387. 4810 K=0 : IF RND(Z)>.06 THEN 4830
  388. 4820 K=INT(RND(Z)*8)*100 : K9=K9+K : K8=K9
  389. 4830 RETURN
  390. 5000 REM SAVE GAME
  391. 5010 PRINT : INPUT "What filename do you want to save the game in ";A$ : IF LEN(A$)=0 THEN 5010
  392. 5020 IF LEN(A$)>8 THEN A$=LEFT$(A$,8)
  393. 5030 A$=A$ +".TRK"
  394. 5040 OPEN "O",#1,A$
  395. 5050 WRITE#1,"G3ZCZ"
  396. 5100 FOR I=0 TO 7 : FOR J=0 TO 7 : WRITE#1, S(I,J),S8(I,J),Q(I,J) : NEXT J : NEXT I
  397. 5130 WRITE#1,E,E1,B,B9,K,K4,K5,K8,K9,Q1,Q2,S,S1,S2,T,T9,X,Y,W,H,N,C$,P,F9,C,G9,S9,C9,D8,L3,X1,X2,Y1,Y2
  398. 5160 FOR I=0 TO 7 : WRITE#1, K1(I),K2(I),K3(I) : NEXT
  399. 5180 FOR I=0 TO C1-C2 : WRITE#1, D(I) : NEXT
  400. 5200 CLOSE#1 : RETURN
  401. 5500 REM RESTORE A SAVED GAME
  402. 5510 PRINT : INPUT "What is the name of the file you saved the game on ";A$ : IF LEN(A$)=0 THEN 5510
  403. 5520 IF LEN(A$)>8 THEN A$=LEFT$(A$,8)
  404. 5530 A$=A$ +".TRK"
  405. 5540 OPEN "I",#1,A$
  406. 5560 INPUT#1, E$ : IF E$<>"G3ZCZ" THEN PRINT "WRONG DATA FILE " GOTO 5700
  407. 5600 FOR I=0 TO 7 : FOR J=0 TO 7 : INPUT#1, S(I,J),S8(I,J),Q(I,J) : NEXT J : NEXT I
  408. 5630 INPUT#1,E,E1,B,B9,K,K4,K5,K8,K9,Q1,Q2,S,S1,S2,T,T9,X,Y,W,H,N,C$,P,F9,C,G9,S9,C9,D8,L3,X1,X2,Y1,Y2
  409. 5660 FOR I=0 TO 7 : INPUT#1, K1(I),K2(I),K3(I) : NEXT
  410. 5680 FOR I=0 TO C1-C2 : INPUT#1, D(I) : NEXT
  411. 5700 CLOSE#1 : RETURN
  412. 6000 REM ERROR TRAPPING ROUTINES
  413. 6010 ON ERROR GOTO 6000
  414. 6020 IF ERR=58 THEN 6150
  415. 6030 IF ERR=61 THEN 6200
  416. 6040 IF ERR=62 THEN 6250
  417. 6050 IF ERR=67 THEN 6300
  418. 6060 IF ERR=53 THEN 6100
  419. 6070 PRINT "ERROR ";ERR;" AT LINE ";ERL
  420. 6090 GOTO 9230
  421. 6100 PRINT A$; " IS NOT ON THE DISK" : RESUME 5500
  422. 6150 PRINT "THAT FILE ALREADY EXISTS"
  423. 6160 INPUT "Do you wish to overwrite it (Y or N) ";E$ : IF LEN(E$)=0 THEN 6160
  424. 6170 IF LEFT$(E$,1)="Y" THEN RESUME 5040
  425. 6180 IF LEFT$(E$,1)="N" THEN RESUME 5000 ELSE 6160
  426. 6200 PRINT "DISK IS FULL"
  427. 6210 PRINT "I CAN'T SAVE ANYTHING ON THAT DISK" : RESUME 5000
  428. 6250 PRINT A$;" DOES NOT CONTAIN THE CORRECT FORM OF DATA" : CLOSE#1 : RESUME 5500
  429. 6300 PRINT "THERE ARE TOO MANY FILES ON THE DISK" : GOTO 6210
  430. 9000 REM ENDGAME
  431. 9010 PRINT : ON F9 GOTO 9020,9040,9080,9130,9160
  432. 9020 REM F9=1 RESIGNATION ENDING
  433. 9030 GOTO 9180
  434. 9040 REM F9=2 CREAMED BY KLINGON
  435. 9050 PRINT "THE ENTERPRISE HAS BEEN DESTROYED "
  436. 9060 PRINT "You did not make such a good Captain, did you ? "
  437. 9070 GOTO 9180 
  438. 9080 REM F9=3 RAN OUT OF ENERGY
  439. 9090 PRINT "The Enterprise has run out of energy." : PRINT
  440. 9100 PRINT "You have just condemed yourself and your crew to"
  441. 9110 PRINT "a horrible and un-necessary death."
  442. 9120 GOTO 9180
  443. 9130 REM F9=4 RAN OUT OF TIME
  444. 9140 PRINT "You did not complete your mission in time"
  445. 9150 GOTO 9180
  446. 9160 REM F9=5 PLAYER WON
  447. 9170 PRINT "CONGRATULATIONS you passed your test"
  448. 9180 PRINT : GOSUB 170 : INPUT "Do you want to play again (Yes/No) "; A$ : IF LEN(A$)=0 THEN 9180
  449. 9190 IF LEFT$(A$,Z)="N" THEN 9230
  450. 9200 IF LEFT$(A$,Z)<>"Y" THEN 9180
  451. 9210 REM START NEW GAME
  452. 9220 PRINT CHR$(26): PRINT : PRINT "WAIT FOR IT" : GOSUB 4660 : GOTO 30
  453. 9230 END
  454.